home *** CD-ROM | disk | FTP | other *** search
- """Import a module while pretending its name is __main__. This
- can be used to run scripts from the PackedLib resource file while pretending
- they have been double-clicked."""
-
- import imp
- import sys
- import os
- import string
- import Dlg
- import macfs
-
- DIALOG_ID = 512
- OK = 1
- CANCEL = 2
- SCRIPTNAME=3
- ARGV=4
- STDIN_CONS=5
- STDIN_FILE=6
- STDOUT_CONS=7
- STDOUT_FILE=8
- WORKING_DIR=9
- PAUSE=10
-
- def import_as_main(name):
- fp, path, (suffix, mode, type) = imp.find_module(name)
- if type == imp.PY_SOURCE:
- imp.load_source('__main__', path, fp)
- elif type == imp.PY_COMPILED:
- imp.load_compiled('__main__', path, fp)
- elif type == imp.PY_RESOURCE:
- imp.load_resource('__main__', path)
-
- def interact():
- d = Dlg.GetNewDialog(DIALOG_ID, -1)
- wdir = stdin = stdout = None
- pause = 0
-
- tp, in_c_h, rect = d.GetDialogItem(STDIN_CONS)
- tp, in_f_h, rect = d.GetDialogItem(STDIN_FILE)
- tp, out_c_h, rect = d.GetDialogItem(STDOUT_CONS)
- tp, out_f_h, rect = d.GetDialogItem(STDOUT_FILE)
- tp, pause_h, rect = d.GetDialogItem(PAUSE)
- in_c_h = in_c_h.as_Control()
- in_f_h = in_f_h.as_Control()
- out_c_h = out_c_h.as_Control()
- out_f_h = out_f_h.as_Control()
- pause_h = pause_h.as_Control()
-
- while 1:
- in_c_h.SetControlValue(not stdin)
- in_f_h.SetControlValue(not not stdin)
- out_c_h.SetControlValue(not stdout)
- out_f_h.SetControlValue(not not stdout)
- pause_h.SetControlValue(pause)
-
- n = Dlg.ModalDialog(None)
- if n == OK:
- break
- elif n == CANCEL:
- sys.exit(0)
- elif n == STDIN_CONS:
- stdin = None
- elif n == STDIN_FILE:
- fss, ok = macfs.StandardGetFile('TEXT')
- if ok:
- stdin = fss
- elif n == STDOUT_FILE:
- fss, ok = macfs.StandardPutFile('stdout:')
- if ok:
- stdout = fss
- elif n == WORKING_DIR:
- fss, ok = macfs.GetDirectory()
- if ok:
- wdir = fss
- elif n == PAUSE:
- pause = (not pause)
-
- tp, h, rect = d.GetDialogItem(SCRIPTNAME)
- name = Dlg.GetDialogItemText(h)
- tp, h, rect = d.GetDialogItem(ARGV)
- argv = Dlg.GetDialogItemText(h)
- return name, argv, stdin, stdout, wdir, pause
-
- def main():
- curdir = os.getcwd()
- import Res
- try:
- Res.OpenResFile('RunLibScript.rsrc')
- except:
- pass # Assume we're an applet already
- name, argv, stdin, stdout, wdir, pause = interact()
- if not name:
- sys.exit(0)
- sys.argv = [name] + string.split(argv)
- if stdin:
- sys.stdin = open(stdin.as_pathname())
- if stdout:
- sys.stdout = open(stdout.as_pathname(), 'w')
- if wdir:
- os.chdir(wdir.as_pathname())
- else:
- os.chdir(curdir)
-
- import_as_main(name)
-
- if pause:
- sys.exit(1)
-
- if __name__ == '__main__':
- main()
-
-